<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// reduce(callback,initValue)遍历数组并构建一个最终的返回值（归并）
// callback 回调函数
// initValue 初始值，可选
// arr.reduce(function (previous,current,index,arr){
//     previous 上一次的返回值
//     current 遍历数组当前的值
//     index 是current的索引
//     arr 遍历的数据
// })

var arr = [1,2,3,4,5];
// 需求：对数组中的所有数字求和

var res1 = arr.reduce(function (previous,current,index,arr){
    // console.log( index );// 1 2 3 4
    return previous += current;

    // 回调函数第1次执行：
        // previous的值为数组第1个元素：1
        // current的值为数组的第2个元素：2
        // index是current的索引：1
        // return 1+2
    // 回调函数第2次执行：
        // previous的值为上一次的返回值：3
        // current的值为数组的第3个元素：3
        // index是current的索引：2
        // return 3+3
    // 回调函数第3次执行：
        // previous的值为上一次的返回值：6
        // current的值为数组的第4个元素：4
        // index是current的索引：3
        // return 6+4
    // 回调函数第4次执行：
        // previous的值为上一次的返回值：10
        // current的值为数组的第5个元素：5
        // index是current的索引：4
        // return 10+5 最终返回值
})
console.log( res1 );// 15

var res2 = arr.reduce(function (previous,current,index,arr){
    // console.log( index );// 0 1 2 3 4
    return previous += current;

    // 回调函数第1次执行：
        // previous的值为初始值：0
        // current的值为数组的第1个元素：1
        // index是current的索引：0
        // return 0+1
    // 回调函数第2次执行：
        // previous的值为上一次的返回值：1
        // current的值为数组的第2个元素：2
        // index是current的索引：1
        // return 1+2
    // 回调函数第3次执行：
        // previous的值为上一次的返回值：3
        // current的值为数组的第3个元素：3
        // index是current的索引：2
        // return 3+3
    // 回调函数第4次执行：
        // previous的值为上一次的返回值：6
        // current的值为数组的第4个元素：4
        // index是current的索引：3
        // return 6+4
    // 回调函数第5次执行：
        // previous的值为上一次的返回值：10
        // current的值为数组的第5个元素：5
        // index是current的索引：4
        // return 10+5 最终的返回值
},0);
console.log( res2 );// 15


var arr2 = [12,24,8,12,8,17,8,35];
// 需求：使用reduce实现数组去重
var arr3 = arr2.reduce(function (previous,current){
    // 判断previous是否有current这个值
    if (previous.indexOf(current) == -1) {
        // 将current添加到previous中
        previous.push(current);
    }

    // previous.indexOf(current) == -1 && previous.push(current);

    return previous;
},[]);
console.log( arr3 );// [12, 24, 8, 17, 35]

</script>
</body>
</html>